﻿using UnityEngine;

namespace Learning.CS
{
    public class DefaultCS : MonoBehaviour
    {
        public ComputeShader computeShader;
        public Material material;

        private void Start()
        {
            // 创建贴图用来接收ComputeShader返回的RWTexture2D
            RenderTexture renderTexture = new RenderTexture(256, 256, 16);
            renderTexture.enableRandomWrite = true; // 因为ComputeShader中是使用GPU的多线程来写入数据的，每个数据的写入时机不确定，所以要开启随机写入
            renderTexture.Create();
            
            material.mainTexture = renderTexture; // 将纹路关联到对应的材质，我们好在场景中查看
            
            int kernelIndex = computeShader.FindKernel("CSMain"); // 找到ComputeShader中的对应的方法
            computeShader.SetTexture(kernelIndex, "Result", renderTexture); // 将贴图关联到ComputeShader中定义的属性上
            
            // 执行ComputeShader并设定每个维度的线程组执行的次数
            computeShader.Dispatch(kernelIndex, 256 / 8, 256 / 8, 1);
        }
    }
}
